From ab3a1c53867486efc860a7570d3cbcc998d84c0e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 25 Aug 2016 13:10:45 +0300 Subject: [PATCH] Don't use current package when reading lockfile --- src/cargo/core/resolver/encode.rs | 17 ++++++++--------- tests/install.rs | 2 +- tests/workspaces.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/cargo/core/resolver/encode.rs b/src/cargo/core/resolver/encode.rs index 1f260761a..3e049ca5c 100644 --- a/src/cargo/core/resolver/encode.rs +++ b/src/cargo/core/resolver/encode.rs @@ -23,19 +23,16 @@ pub type Metadata = BTreeMap; impl EncodableResolve { pub fn into_resolve(self, ws: &Workspace) -> CargoResult { let path_deps = build_path_deps(ws); - let default = try!(ws.current()).package_id().source_id(); let mut g = Graph::new(); let mut tmp = HashMap::new(); let mut replacements = HashMap::new(); let id2pkgid = |id: &EncodablePackageId| { - to_package_id(&id.name, &id.version, id.source.as_ref(), - default, &path_deps) + to_package_id(&id.name, &id.version, id.source.as_ref(), &path_deps) }; let dep2pkgid = |dep: &EncodableDependency| { - to_package_id(&dep.name, &dep.version, dep.source.as_ref(), - default, &path_deps) + to_package_id(&dep.name, &dep.version, dep.source.as_ref(), &path_deps) }; let packages = { @@ -127,7 +124,6 @@ impl EncodableResolve { let id = try!(to_package_id(&id.name, &id.version, id.source.as_ref(), - default, &path_deps)); let v = if v == "" { None @@ -194,11 +190,14 @@ fn build_path_deps(ws: &Workspace) -> HashMap { fn to_package_id(name: &str, version: &str, source: Option<&SourceId>, - default_source: &SourceId, path_sources: &HashMap) -> CargoResult { - let source = source.or(path_sources.get(name)).unwrap_or(default_source); - PackageId::new(name, version, source) + if let Some(source) = source.or(path_sources.get(name)) { + PackageId::new(name, version, source) + } else { + let dummy_source = SourceId::from_url("path+file:///dummy_path").unwrap(); + PackageId::new(name, version, &dummy_source) + } } diff --git a/tests/install.rs b/tests/install.rs index 45eabb782..5a9182a32 100644 --- a/tests/install.rs +++ b/tests/install.rs @@ -750,7 +750,7 @@ fn git_with_lockfile() { [root] name = "foo" version = "0.1.0" - dependencies = [ "b 0.1.0" ] + dependencies = [ "bar 0.1.0" ] [[package]] name = "bar" diff --git a/tests/workspaces.rs b/tests/workspaces.rs index 8ded09b77..ab3b117fa 100644 --- a/tests/workspaces.rs +++ b/tests/workspaces.rs @@ -910,3 +910,33 @@ fn workspace_in_git() { assert_that(p.cargo("build"), execs().with_status(0)); } + + +#[test] +fn lockfile_can_specify_nonexistant_members() { + let p = project("foo") + .file("Cargo.toml", r#" + [workspace] + members = ["a"] + "#) + .file("a/Cargo.toml", r#" + [project] + name = "a" + version = "0.1.0" + authors = [] + "#) + .file("a/src/main.rs", "fn main() {}") + .file("Cargo.lock", r#" + [root] + name = "a" + version = "0.1.0" + + [[package]] + name = "b" + version = "0.1.0" + "#); + + p.build(); + + assert_that(p.cargo("build").cwd(p.root().join("a")), execs().with_status(0)); +} -- 2.30.2